package com.zmn.brs.services.impl.scene;

import com.zmn.manager.common.database.annotation.ReadOnlyConnection;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.util.List;

import com.zmn.brs.model.entity.scene.Scene;
import com.zmn.brs.model.entity.scene.SceneQuery;
import com.zmn.brs.services.interfaces.scene.SceneService;
import com.zmn.brs.persistence.interfaces.scene.SceneDao;

/**
 * 描述: 业务场景基础接口实现类
 *
 * @author xujie
 * @since  2021-03-17 13:55:07
 **/
@Slf4j
@Service
public class SceneServiceImpl implements SceneService {

    private static final String TAG = "业务场景基础服务接口";

    @Resource
    private SceneDao sceneDao;

    /**
     * 描述: 根据id查询数据
     *
     * @param sceneId id
     * @author xujie
     * @since 2021-03-17 13:55:07
     **/
    @Override
    @ReadOnlyConnection
    public Scene findById(Integer sceneId) {

        Assert.notNull(sceneId, TAG + "参数 sceneId 不能为空");
        return sceneDao.findById(sceneId);
    }

    /**
     * 描述: 按条件查询数据 支持分页
     *
     * @param query 查询对象
     * @author xujie
     * @since 2021-03-17 13:55:07
     **/
    @Override
    @ReadOnlyConnection
    public List<Scene> listPageByQuery(SceneQuery query) {

        Assert.notNull(query, TAG + "参数 query 不能为空");
        query.setTotalCount(sceneDao.countByQuery(query));
        return sceneDao.listPageByQuery(query);
    }

    /**
     * 描述: 按条件查询数据 不支持分页
     *
     * @param query 查询对象
     * @author xujie
     * @since 2021-03-17 13:55:07
     **/
    @Override
    @ReadOnlyConnection
    public List<Scene> listByQuery(SceneQuery query) {

        Assert.notNull(query, TAG + "参数 query 不能为空");
        return sceneDao.listByQuery(query);
    }

    /**
     * 描述: 按条件查询数据 不支持分页
     *
     * @param query 查询对象
     * @author xujie
     * @since 2021-03-17 13:55:07
     **/
    @Override
    @ReadOnlyConnection
    public Integer countByQuery(SceneQuery query) {

        Assert.notNull(query, TAG + "参数 query 不能为空");
        return sceneDao.countByQuery(query);
    }

    /**
     * 描述: 根据id修改数据 id为必传
     *
     * @param scene 待修改数据
     * @return java.lang.Integer
     * @author xujie
     * @since 2021-03-17 13:55:07
     **/
    @Override
    public Integer updateByKey(Scene scene) {

        Assert.notNull(scene, TAG + "参数 scene 不能为空");
        Assert.notNull(scene.getSceneId(), TAG + "字段 sceneId 不能为空");
        return sceneDao.updateByKey(scene);
    }

    /**
     * 描述: 批量修改数据
     * @param sceneList 数据集合
     * @return java.lang.Integer 成功个数
     * @author xujie
     * @since  2021-03-17 13:55:07
     */
    @Override
    public Integer updateBatchByKey(List<Scene> sceneList) {

        if (sceneList == null || sceneList.size() == 0) {
            return null;
        }
        return sceneDao.updateBatchByKey(sceneList);
    }

    /**
     * 描述: 新增数据
     *
     * @param scene 待新增数据
     * @return java.lang.Integer 主键key
     * @author xujie
     * @since  2021-03-17 13:55:07
     **/
    @Override
    public Integer insert (Scene scene) {

        Assert.notNull(scene, TAG + "参数 scene 不能为空");
        return sceneDao.insert(scene);
    }

    /**
     * 描述: 批量新增数据
     * @param sceneList 待新增数据集合
     * @return java.lang.Integer 成功个数
     * @author xujie
     * @since  2021-03-17 13:55:07
     */
    @Override
    public Integer insertBatch(List<Scene> sceneList) {

        if (sceneList == null || sceneList.size() == 0) {
            return null;
        }
        return sceneDao.insertBatch(sceneList);
    }

    /**
     * 描述: 根据主键删除数据
     *
     * @param sceneId 主键
     * @return 执行结果码
     * @author xujie
     * @since 2021-03-17 13:55:07
     */
    @Override
    public Integer deleteByKey(Integer sceneId) {

        Assert.notNull(sceneId, TAG + "参数 sceneId 不能为空");
        return sceneDao.deleteByKey(sceneId);
    }

    /**
     * 描述: 根据主键批量删除数据
     *
     * @param sceneIdList 待新增数据集合
     * @return java.lang.Integer 成功个数
     * @author xujie
     * @since  2021-03-17 13:55:07
     */
    @Override
    public Integer deleteBatchByKey(List<Integer> sceneIdList) {

        if (sceneIdList == null || sceneIdList.size() == 0) {
            return null;
        }
        return sceneDao.deleteBatchByKey(sceneIdList);
    }

}